// 提供一个名为getList的接口（http://localhost:8083/getList?name=xxxx），
// 它以json字符串格式返回`db/data.json`中name为xxxx的数据

// 1. 引用
const http = require('http')
const qs = require('querystring')
const fs = require('fs')
const path = require('path')
// console.log('qs', qs)
// 2. 创建服务
const server = http.createServer((req, res) => {
  const { method } = req
  const [url, queryStr] = req.url.split('?')  // ===> [   ,  ]
  console.log(method, url, queryStr)

  // data.json的路径
  const filePath = path.join(__dirname, 'db', 'data.json')

  // 如果 本次请求是get，并且url是getList
  //   拆分出查询参数
  //   读出db/data.json
  //   做查询
  if(method === "GET" && url === '/getList') {
    const qsObj = qs.parse(queryStr)
    
    // content是一个JSON字符串
    const content = fs.readFileSync(filePath, 'utf8')

    // 把JSON字符串转成数组对象
    const arr = JSON.parse(content)
    
    console.log(qsObj, qsObj.name, filePath, content, arr)
    // 对数组对象中做查询： find只会返回第一个找到的结果（只返回第一个满足查询条件的元素）
    const rs = arr.find(function(item){
      // 如果找到 return true, 否则，return false
      if(item.name === qsObj.name) {
        return true
      } else {
        return false
      }
    })

    // 把找到的结果返回给前端
    res.end(JSON.stringify(rs))

  } else if(method === "POST" && url === '/add'){
    // 它以post的方式请求接口，并传入name值，把数据保存到`db/data.json `中去。
    
    let result = ''
    // 添加事件监听
    req.on('data', (chunk) => {
      console.log('收到一小段数据,格式是buffer', chunk)
      // 把当前收到这一段数据，收集起来
      result += chunk
    })

    req.on('end', () => {
      console.log('只会执行一次回调，本次数据全部接收完成,数据如下：')
      // 下面的数据是一个查询字符串格式
      // console.log(result)
      // 取出来里面的参数
      const qsObj = qs.parse(result)
      
      // 把qsObj.name的值，组装成对象，添加以data.json文件中
      // 1. 读 出data.json  ---> 数组对象
      const content = fs.readFileSync(filePath,'utf8')
      const arr = JSON.parse(content)
      // console.log(arr, qsObj, qsObj.name)
      // 2. 数组对象.push(qsObj.name)
      arr.push({name: qsObj.name })
      console.log(arr)
      // 3. 写 回去data.json文件
      // 同步写入writeFileSync(路径， 内容)
      fs.writeFileSync(filePath, JSON.stringify(arr))
    })

    res.end('post接口')

  } else {
    res.end('404, 接口不存在！')
  }
})
// 3. 启动
server.listen(8083, () => { console.log('你的服务器已经就绪了')})
